package com.tjetc;

import org.apache.ibatis.executor.Executor;
import org.apache.ibatis.session.SqlSession;

/**
 * @author gaoyongxiang
 * @version v1.0
 * @date 2025/8/20
 */
@SuppressWarnings("all")
public class Overview {
    /*
         自己实现一个Mybatis并进行使用
         1. 目的：真正了解Mybatis底层的执行逻辑
         2. 其中很多的代码都进行了简化，里面很多的反射机制省略了
         3. 尽量听 这里面用到的几乎都是基础 只是逻辑和思想麻烦一点 我们做的只是模仿

         Mybatis的执行流程：
         1.Mybatise中有一个配置文件（my-config.xml）Configuration加载配置
         2.需要一个会话工程 SqlSessionFactory 根据配置文件读取到我们自定义的配置信息
         3.通过这个会话工厂我们可以获取到一个SqlSession对象 用来建立client（程序员）和 Mysql服务的桥梁
         4.一旦建立连接SqlSession就可以给Mysql发送查询命名
         5.真正执行sql语句的是一个Executor执行器（1.基础执行器 2.缓存执行器）
         6.MapperStatement对象会加载mapper文件
         7.执行器就结合我们程序员定义的接口方法和MapperStatement对象读取到的mapper文件进行组装，开始去数据库真正执行，并得到最后结果
         8.结果集进行映射到我们的JavaBean中
     */
    public static void main(String[] args) {
        /*
            只跑一个sql 不做通用化处理 select * from bank where id = 1;
            1.完成配置文件的读取，得到数据库的连接 配置文件名称my-config.xml
            2.编写MyExecutor执行器，输入sql语句并执行 传统方法执行
            3.创建MySqlSession对象 建立和数据库连接
            4.构建Mapper接口和对应Mapper.xml文件 有了Mapper的映射文件就实现了Sql和Java代码的解耦
            5.将Mapper文件进行解析并读取到对象中（MapperBean）  后面Java程序要知道你到底要执行什么方法？
            6.通过SqlSession对象拿到Mapper信息 （mapper的文件在哪里？my-config.xml）简化操作 直接读取
            7.生成Mpper接口的代理对象并执行方法
         */
    }

}